﻿#ifndef __AF_CFLASHACT_H__
#define __AF_CFLASHACT_H__

#include "AF_Define.h"

namespace AF
{
	struct FlashEffect;
	//class Animation -* Runnable
		//class Action
			class FlashAction;
}
typedef AF::FlashEffect			AF_SFlashEffect;
typedef AF::FlashAction			AF_CFlashAction;

#include "AF_Action.h"

#define AF_FA_TIMES_DEFAULT		0		// 无限次
#define AF_FA_TIME_DEFAULT		1000

namespace AF
{
	/// 闪烁动作目标效果结构
	struct FlashEffect
	{
		/// 隐藏时间
		TimeTicks	ttHideTime;
		/// 显现时间
		TimeTicks	ttShowTime;
		/// 闪烁次数
		UINT		nTimes;
		/// 是否为渐显模式
		bool		isFadeIn;	// 是否渐显
		/// 是否为渐隐模式
		bool		isFadeOut;	// 是否渐隐

		FlashEffect()
		{
			ttHideTime = AF_FA_TIME_DEFAULT >> 1;
			ttShowTime = AF_FA_TIME_DEFAULT >> 1;
			nTimes = AF_FA_TIMES_DEFAULT;
			isFadeIn = false;
			isFadeOut = false;
		}
	};

	/// 闪烁动作类
	class FlashAction : public Action
	{
	public:
		FlashAction();
		~FlashAction();

		void			SetEffect(Pointer pEffect);
		/// 快捷方式，闪烁效果
		void			Flash(UINT nTimes = AF_FA_TIMES_DEFAULT, TimeTicks ttTime = AF_FA_TIME_DEFAULT);
		/// 快捷方式，闪烁效果
		void			Flash(UINT nTimes, TimeTicks ttHideTime, TimeTicks ttShowTime);

	protected:
		bool			OnUpdate();
		bool			OnPlay(Bundle* pParam);
		bool			OnStop();

	private:
		FlashEffect		m_Effect;
		UINT			m_nTimes;
		TimeTicks		m_ttLast;		// 上次时间
		bool			m_isHide;
		bool			m_isHostVisible;	// 记录宿主闪烁前的隐藏状态，闪烁结束后返回此状态
	};
}

#endif